package Adapter;
import javax.swing.*;
import java.awt.event.*;

// 这相比于匿名适配，就挫太多了，建议使用匿名适配器
class MyMouse extends MouseAdapter
{
    MyFrame frame;
    public MyMouse(JPopupMenu pm,MyFrame frame)
    {
        this.frame = frame;
    }
    public void mouseReleased(MouseEvent e)
    {
        if(e.isPopupTrigger())
        {
            frame.pm.show(frame,e.getX(),e.getY());
        }
    }
}

public class MyFrame extends JFrame{
    JPopupMenu pm;
    public MyFrame()
    {
        this.setSize(350,200);
        this.setTitle("Popup Menu Demo.");
        this.setLayout(null); // 将JFrame的布局设置为空，通过坐标定位

        pm = new JPopupMenu();
        JMenuItem mi1 = new JMenuItem("打开");
        JMenuItem mi2 = new JMenuItem("保存");
        JMenuItem mi3 = new JMenuItem("退出");
        pm.add(mi1);
        pm.add(mi2);
        pm.add(mi3);

        // 使用匿名内部类，比再创建一个类继承适配器，更方便
        this.addMouseListener(new MyMouse(pm,this));

        this.setLocationRelativeTo(null); // 使窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 响应窗口关闭按钮
        this.setVisible(true); // 将窗口显示出来
    }
    public static void main(String[] args)
    {
        new MyFrame();
    }
}